package com.jai.pms.service.impl;

import java.util.List;
import java.util.Objects;

import com.jai.pms.domain.Tool;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jai.pms.mapper.DataMapper;
import com.jai.pms.domain.Data;
import com.jai.pms.service.IDataService;

/**
 * 数据管理Service业务层处理
 *
 * @author v
 * @date 2023-08-22
 */
@Service
public class DataServiceImpl implements IDataService {
    @Autowired
    private DataMapper dataMapper;

    /**
     * 查询数据管理
     *
     * @param id 数据管理主键
     * @return 数据管理
     */
    @Override
    public Data selectDataById(Long id) {
        return dataMapper.selectDataById(id);
    }

    /**
     * 查询数据管理列表
     *
     * @param data 数据管理
     * @return 数据管理
     */
    @Override
    public List<Data> selectDataList(Data data) {
        return dataMapper.selectDataList(data);
    }

    /**
     * 新增数据管理
     *
     * @param data 数据管理
     * @return 结果
     */
    @Override
    public int insertData(Data data) {
        preCheck(data, true);

        LoginUser loginUser = SecurityUtils.getLoginUser();
        data.setCreateBy(loginUser.getUsername());
        data.setCreateTime(DateUtils.getNowDate());

        return dataMapper.insertData(data);
    }

    /**
     * 修改数据管理
     *
     * @param data 数据管理
     * @return 结果
     */
    @Override
    public int updateData(Data data) {
        preCheck(data, false);

        LoginUser loginUser = SecurityUtils.getLoginUser();
        data.setUpdateBy(loginUser.getUsername());
        data.setUpdateTime(DateUtils.getNowDate());
        return dataMapper.updateData(data);
    }

    /**
     * 批量删除数据管理
     *
     * @param ids 需要删除的数据管理主键
     * @return 结果
     */
    @Override
    public int deleteDataByIds(Long[] ids) {
        return dataMapper.deleteDataByIds(ids);
    }

    /**
     * 删除数据管理信息
     *
     * @param id 数据管理主键
     * @return 结果
     */
    @Override
    public int deleteDataById(Long id) {
        return dataMapper.deleteDataById(id);
    }

    /**
     * 添加、修改前检查
     *
     * @param data  数据
     * @param isAdd 是否为添加
     */
    private void preCheck(Data data, boolean isAdd) {
        // 检查是否有重复信息，主键code
        Data query = new Data();
        query.setCode(data.getCode());
        List<Data> queryList = dataMapper.selectDataList(query);
        if (isAdd) {
            if (queryList.size() > 0) {
                throw new ServiceException("该数据已经存在");
            }
        } else {
            if (queryList.size() > 0 && !Objects.equals(queryList.get(0).getId(), data.getId())) {
                throw new ServiceException("该数据已经存在");
            }
        }
    }
}
